/**
 * 首页js封装
 * Copyright (c) 2022 fanwei
 */
var scroll_page_width = new Map();
var scroll_page_current = 1;
var closed_menu_tab_active = false;
// 计算显示页签总宽度，并进行分页
function computeShowMenuWidth() {
    var fw_menu_tab_max_width = $('.fw-header-nav').width() - $('.fw-menu-add').width();
    var scroll_page_btn_width = $('.fw-menu-scroll-left').width() == 0 ? 20 : $('.fw-menu-scroll-left').width() * 2;

    var menu_list = $(".fw-menu-tab").children(".fw-menu");
    var show_menu_width = 0;
    var scroll_page_num = 1;
    for(var i=0;i<menu_list.length;i++){
        var item_width = $(menu_list[i]).width();
        if((show_menu_width + item_width + scroll_page_btn_width + 2) > fw_menu_tab_max_width){
            scroll_page_width.set(scroll_page_num, show_menu_width);
            show_menu_width = 0;
            scroll_page_num++;
            i--;
        }else {
            show_menu_width += ( item_width + 1);
            if((i == (menu_list.length-1)) && (show_menu_width + scroll_page_btn_width + 2) <= fw_menu_tab_max_width){
                scroll_page_width.set(scroll_page_num, show_menu_width);
                show_menu_width = 0;
                scroll_page_num++;
            }
        }
    }
}
// 向右翻页页签栏页签
function right_scroll_nav_tab() {
    // 计算分页宽度以达到更佳的翻页体验
    computeShowMenuWidth();
    var getRight = $(".fw-menu-tab")[0];
    if(scroll_page_width.has(scroll_page_current+1)){
        getRight.scrollLeft += scroll_page_width.get(scroll_page_current);
        scroll_page_current++;
    }else {
        $.modal.msgWarning("已翻到末尾页啦")
    }
}
// 向左翻页页签栏页签
function left_scroll_nav_tab() {
    // 计算分页宽度以达到更佳的翻页体验
    computeShowMenuWidth();
    var getLeft = $(".fw-menu-tab")[0];
    if(scroll_page_width.has(scroll_page_current-1)) {
        getLeft.scrollLeft -= scroll_page_width.get(scroll_page_current);
        scroll_page_current--;
    }else {
        $.modal.msgWarning("已翻到第一页啦")
    }
}
// 格式化页签栏
function init_nav_tab() {
    var fw_menu_tab_max_width = $('.fw-header-nav').width() - $('.fw-menu-add').width();
    var scroll_page_btn_width = $('.fw-menu-scroll-left').width() == 0 ? 20 : $('.fw-menu-scroll-left').width() * 2;

    var menu_list = $(".fw-menu-tab").children(".fw-menu");
    var menu_tab_width = 0;
    $.each(menu_list, function (i, item) {
        menu_tab_width += $(item).width() + 1;
    });
    if(menu_tab_width + scroll_page_btn_width <= fw_menu_tab_max_width){
        $(".fw-menu-scroll-left,.fw-menu-scroll-right").addClass("am-hide");
        $(".fw-menu-tab").width(menu_tab_width);
    }else {
        $(".fw-menu-scroll-left,.fw-menu-scroll-right").removeClass("am-hide");
        $(".fw-menu-tab").width(menu_tab_width + scroll_page_btn_width + 2);
    }
}

function add_menu_tab(menuId, menuName, menuIcon, menuUrl) {
    add_nav_tab(menuId, menuUrl, menuName, menuIcon, 0);
}

function add_connect_tab(connectId, connectName, connectGroup, databaseName) {
    var url = ctx + "osfw/dbadminer/database/sql/" + connectId + "/" + connectName + "/" + connectGroup + "/" + databaseName;
    var title = "";
    if((connectName == undefined || connectName == '--') && (databaseName == undefined || databaseName == '--')){
        title = "无标题 - 查询";
    }else if(databaseName == undefined || databaseName == '--') {
        title = connectName + " - 查询";
    }else {
        title = databaseName + " ("+connectName+")" + " - 查询";
    }
    add_nav_tab(connectId + "-" + databaseName, url, title, 'am-icon-database', connectGroup);
}

// 新增页签
function add_nav_tab(id, url, title, icon, groupClass) {
    var menu_count = 0; // 初始化最大值为无限小
    $(".fw-menu-tab").children(".fw-menu").each(function() {
        var value = parseInt($(this).data("id")); // 获取所有自定义属性及其对应的值
        if (value > menu_count) {
            menu_count = value; // 更新最大值
        }
    });

    var menuTabE = '<div class="am-margin-0 am-padding-0 fw-menu" data-id="'+(menu_count+1)+'">' +
        '<a class="am-icon-btn am-radius connect-group-'+groupClass+'" title="'+title+'">' +
        '   <i class="fw-icon-title '+icon+' am-icon-fw"></i>' +
        '   <span class="sql-tab-title am-ellipsis"> '+title+'</span>' +
        '   <i class="am-close am-icon-close am-close-spin fw-menu-close" title="关闭当前页签"></i>' +
        '</a>'+
        '</div>';

    $(".fw-menu-tab").append(menuTabE);
    init_nav_tab();
    // 计算分页宽度以达到更佳的翻页体验
    computeShowMenuWidth();
    var getRight = $(".fw-menu-tab")[0];
    scroll_page_width.forEach(function (value, key) {
        getRight.scrollLeft += value;
        scroll_page_current = key;
    });
    var iframeE = '<iframe class="moxia_iframe am-hide" name="iframe'+(menu_count+1)+'" width="100%" height="100%" data-id="'+(menu_count+1)+'" style="vertical-align:bottom;"' +
        'data-url="' + url + '" src="' + url + '" frameborder="no" border="0" marginwidth="0" marginheight="0" scrolling="yes" seamless></iframe>';
    $(".fw-iframe-content").append(iframeE);
    // 切换至新标签页
    switch_active_tab($(".fw-menu-tab").find(".fw-menu[data-id='"+(menu_count+1)+"']"));
    // 格式化菜单栏
    init_nav_tab();
}
// 关闭页签
function close_nav_tab(obj) {
    // 当所有页签都关闭时，默认打开主页
    if(closed_menu_tab_active){ //批量关闭时
        $(obj).parent("a").parent(".fw-menu").remove();
        $('.moxia_iframe[data-id="' + $(obj).parent("a").parent(".fw-menu").data('id') + '"]').remove();
        init_nav_tab();
        if($(".fw-menu-tab .fw-menu").length==0){
            // console.log("当所有页签都关闭时，默认打开主页");
            $('.moxia_iframe[data-id="0"]').removeClass("am-hide");
        }else {
            // console.log("当关闭全部非收藏页签时，默认切换至最后一个页签");
            switch_active_tab($(".fw-menu-tab").children(".fw-menu").last());
            closed_menu_tab_active = false;
        }
    }else { //单个关闭时
        var _switch_menu = null;
        if($(obj).parent("a").hasClass('fw-active')){
            // console.log("当当前页签关闭时，默认先右后左"+$(obj).parent("a").parent(".fw-menu").next('.fw-menu'));
            if($(obj).parent("a").parent(".fw-menu").next().length != 0) {
                // console.log("右侧有页签");
                _switch_menu = $(obj).parent("a").parent(".fw-menu").next('.fw-menu');
            }else if($(obj).parent("a").parent(".fw-menu").prev().length != 0) {
                // console.log("右侧没有页签")
                _switch_menu = $(obj).parent("a").parent(".fw-menu").prev('.fw-menu');
            }else {
                // console.log("当所有页签都关闭时，默认打开主页");
                $('.moxia_iframe[data-id="0"]').removeClass("am-hide");
            }
        }
        if(_switch_menu != null){
            switch_active_tab(_switch_menu);
        }
        $(obj).parent("a").parent(".fw-menu").remove();
        $('.moxia_iframe[data-id="' + $(obj).parent("a").parent(".fw-menu").data('id') + '"]').remove();

        // 格式化菜单栏
        init_nav_tab();
    }
}
// 收藏页签
function add_nav_tack(obj) {
    var tack_menus = $('.fw-menu-tab').children(".fw-menu-tack");
    if(tack_menus.length >= 10){
        $.modal.msgWarning("最多可收藏 10 个标签哦");
        return;
    }

    var data_id = $(obj).data("id");
    $(obj).addClass("fw-menu-tack");
    var children_menus = $('.fw-menu-tab').children("div.fw-menu:not(.fw-menu-tack)");
    var after_id = undefined;
    $.each(children_menus, function (i, item) {
        if(after_id == undefined){
            after_id = $(item).data("id");
        }
    });
    if(after_id != undefined) {
        // 前后移动标签
        updown_tab(after_id, data_id, "down");
    }
    // 格式化菜单栏
    init_nav_tab();
    // TODO 持久化到数据库
}
// 取消收藏页签
function cancel_nav_tack(obj) {
    $(obj).removeClass("fw-menu-tack");
    var data_id = $(obj).data("id");
    var children_menus = $('.fw-menu-tab').children(".fw-menu-tack");
    var after_id = undefined;
    $.each(children_menus, function (i, item) {
        after_id = $(item).data("id");
    });
    if(data_id != undefined) {
        // 前后移动标签
        updown_tab(after_id, data_id, "up");
    }
    // 格式化菜单栏
    init_nav_tab();
    // TODO 持久化到数据库
}
// 切换活动页签
function switch_active_tab(obj){
    $(".fw-menu-tab .fw-menu > a").removeClass("fw-active");
    if(obj == null) return;
    $(obj).find("a").addClass("fw-active");
    switch_active_iframe($('.moxia_iframe[data-id="' + $(obj).data('id') + '"]'));
}
// 切换活动页签内容
function switch_active_iframe(obj){
    $(".fw-iframe-content > iframe.moxia_iframe").addClass("am-hide");
    $(obj).removeClass("am-hide");
}
// 调整页签位置
function updown_tab(li_id , li_id_2, dir) {
    $(".fw-menu-tab .fw-menu[data-id='"+ li_id +"']")[dir!='up'?'before':'after']($(".fw-menu-tab .fw-menu[data-id='"+ li_id_2 +"']"));
}

$(function () {
    // logo点击刷新事件
    $(".fw-header-logo").click(function (){
        $('.moxia_iframe').addClass("am-hide");
        var target = $('.moxia_iframe[data-id="0"]');
        target.removeClass("am-hide");
        var url = target.data("url");
        target.attr('src', url).ready();
        // $("#fw-header-logo-title").text("DB");
        $("#fw-header-logo-title").html('<i class="'+$("#fw-header-logo-title").data("menuicon")+'"></i>');
    });
    // 菜单tab翻页实现
    $(".fw-menu-scroll-right").click(function (){
        right_scroll_nav_tab();
    });
    $(".fw-menu-scroll-left").click(function (){
        left_scroll_nav_tab();
    });
    // 添加一个tab
    $(".fw-menu-add").click(function (event) {
        event.stopPropagation();
        // 新建查询或功能页签 todo 不区分新建页签类型
        /*if($(this).find("a").data("icon") == "am-icon-database") {
            add_connect_tab(-1, "--", "0", "--");
        }else {
            add_menu_tab($(this).find("a").data("id"), "无标题", $(this).find("a").data("icon"),ctx + "osfw/system/manage/menu/select/"+$(this).find("a").data("id"));
        }*/
        add_menu_tab($(this).find("a").data("id"), "无标题", $(this).find("a").data("icon"),ctx + "osfw/system/manage/menu/select/"+$(this).find("a").data("id"));
    });
    // 关闭指定页签
    $(".fw-menu-tab").on('click', '.fw-menu-close',function(event) {
        event.stopPropagation();
        close_nav_tab(this);
        closed_menu_tab_active = false;
        // switch_active_tab($(".fw-menu-tab").lastChild);
    });
    // 切换菜单页签
    $(".fw-menu-tab").on('click', '.fw-menu',function(event) {
        event.stopPropagation();
        switch_active_tab(this);
    });
});

// 右键菜单实现
$(function() {
    initContextMenu();
});

function initContextMenu() {
    $.contextMenu('destroy');
    $.contextMenu({
        selector: ".fw-menu-tab .fw-menu:not(.fw-menu-tack)",
        trigger: 'right',
        autoHide: false,
        items: {
            "open": {
                name: "新开窗口",
                callback: function(key, opt) {
                    var target = $('.moxia_iframe');
                    window.open(target.attr('src'));
                }
            },
            "step1": "---------",
            "add_tack": {
                name: "固定页签",
                callback: function(key, opt) {
                    add_nav_tack(this);
                }
            },
            "step2": "---------",
            "close_current": {
                name: "关闭当前",
                callback: function(key, opt) {
                    close_nav_tab($(this).find('.fw-menu-close'));
                }
            },
            "close_left": {
                name: "关闭左侧",
                disabled: function(){
                    return this.prevAll('.fw-menu-tab .fw-menu').not('.fw-menu-tack').length == 0;
                },
                callback: function(key, opt) {
                    if(this.prevAll('.fw-menu-tab .fw-menu').not('.fw-menu-tack').find('a.fw-active').length > 0){
                        closed_menu_tab_active = true;
                    }
                    this.prevAll('.fw-menu-tab .fw-menu').not('.fw-menu-tack').find('.fw-menu-close').each(function (){
                        close_nav_tab(this);
                    });
                }
            },
            "close_right": {
                name: "关闭右侧",
                disabled: function(){
                    return this.nextAll('.fw-menu-tab .fw-menu').not('.fw-menu-tack').length == 0;
                },
                callback: function(key, opt) {
                    if(this.nextAll('.fw-menu-tab .fw-menu').not('.fw-menu-tack').find('a.fw-active').length > 0){
                        closed_menu_tab_active = true;
                    }
                    this.nextAll('.fw-menu-tab .fw-menu').not('.fw-menu-tack').find('.fw-menu-close').each(function (){
                        close_nav_tab(this);
                    });
                }
            },
            "close_other": {
                name: "关闭其他",
                disabled: function(){
                    return this.siblings('.fw-menu-tab .fw-menu').not('.fw-menu-tack').length == 0;
                },
                callback: function(key, opt) {
                    if(this.siblings('.fw-menu-tab .fw-menu').not('.fw-menu-tack').find('a.fw-active').length > 0){
                        closed_menu_tab_active = true;
                    }
                    this.siblings('.fw-menu-tab .fw-menu').not('.fw-menu-tack').find('.fw-menu-close').each(function (){
                        close_nav_tab(this);
                    });
                }
            },
            "close_all": {
                name: "关闭全部",
                callback: function(key, opt) {
                    if($('.fw-menu-tab .fw-menu').not('.fw-menu-tack').find('a.fw-active').length > 0){
                        closed_menu_tab_active = true;
                    }
                    $('.fw-menu-tab .fw-menu').not('.fw-menu-tack').find('.fw-menu-close').each(function (){
                        close_nav_tab(this);
                    });
                }
            },
            "step3": "---------",
            "full": {
                name: "全屏显示",
                callback: function(key, opt) {
                    var target = $('.moxia_iframe');
                    target.fullScreen(true);
                }
            },
        }
    });
    $.contextMenu({
        selector: ".fw-menu-tab .fw-menu-tack",
        trigger: 'right',
        autoHide: true,
        items: {
            "open": {
                name: "新开窗口",
                callback: function(key, opt) {
                    var target = $('.moxia_iframe');
                    window.open(target.attr('src'));
                }
            },
            "step1": "---------",
            "cancel_tack": {
                name: "取消固定",
                callback: function(key, opt) {
                    cancel_nav_tack(this);
                }
            },
            "step2": "---------",
            "close_current": {
                name: "关闭当前",
                callback: function(key, opt) {
                    close_nav_tab($(this).find('.fw-menu-close'));
                }
            },
            "close_other": {
                name: "关闭其他",
                disabled: function(){
                    return $('.fw-menu-tab .fw-menu').not('.fw-menu-tack').length == 0;
                },
                callback: function(key, opt) {
                    if(this.siblings('.fw-menu-tab .fw-menu').not('.fw-menu-tack').find('a.fw-active').length > 0){
                        closed_menu_tab_active = true;
                    }
                    this.siblings('.fw-menu-tab .fw-menu').not('.fw-menu-tack').find('.fw-menu-close').each(function (){
                        close_nav_tab(this);
                    });
                }
            },
            "step3": "---------",
            "full": {
                name: "全屏显示",
                callback: function(key, opt) {
                    var target = $('.moxia_iframe');
                    target.fullScreen(true);
                }
            },
        }
    });
    // 数据库连接管理右键菜单
    $.contextMenu({
        selector: ".fw-oper-message-list .fw-list-item.connect",
        trigger: 'right',
        autoHide: false,
        items: {
            "open_connect": {
                name: "打开连接",
                callback: function(key, opt) {
                    jianshezhong();
                }
            },
            /*"close_connect": {
                name: "关闭连接",
                callback: function(key, opt) {
                    jianshezhong();
                }
            },*/
            "step1": "---------",
            "edit_connect": {
                name: "编辑连接",
                callback: function(key, opt) {
                    jianshezhong();
                }
            },
            "delete_connect": {
                name: "删除连接",
                callback: function(key, opt) {
                    jianshezhong();
                }
            },
            "step2": "---------",
            "add_database": {
                name: "新建数据库",
                callback: function(key, opt) {
                    jianshezhong();
                }
            },
            "new_query": {
                name: "新建查询",
                callback: function(key, opt) {
                    jianshezhong();
                }
            },
            "step3": "---------",
            "execute_sql": {
                name: "运行SQL文件",
                callback: function(key, opt) {
                    jianshezhong();
                }
            },
        }
    });
}